package com.chezhujie.www.service;

import com.chezhujie.www.core.exception.ClassCheckException;
import com.chezhujie.www.domain.Czjawardstock;
import com.chezhujie.www.domain.Czjawarduse;
import com.chezhujie.www.domain.Czjusecoupon;
import com.chezhujie.www.domain.vo.Coupons;
import com.chezhujie.www.persistence.CzjusecouponMapper;
import com.chezhujie.www.utils.ConvertObj;
import com.chezhujie.www.utils.UUIDUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.ModelMap;

import java.util.List;


/**
 * 使用的奖品（主要和订单相关的，包含红包、优惠券、优惠名额）
 * Created by 汤伟杰 on 2017/5/23.
 */
@Service
public class CzjusecouponService extends BaseService<Czjusecoupon>{
    @Autowired
    private CzjusecouponMapper czjusecouponMapper;
    @Autowired
    private CzjawardstockService czjawardstockService;
    @Autowired
    private CzjawarduseService czjawarduseService;

    @Autowired
    public void setBaseMapper(CzjusecouponMapper czjusecouponMapper) {
        this.baseMapper = czjusecouponMapper;
    }


    public void checkEntity(Czjusecoupon czjusecoupon) throws ClassCheckException {
        if(czjusecoupon.getUsecouponId()!=null&&czjusecoupon.getUsecouponId().length()>19){
            throw new ClassCheckException("使用的奖品（主要和订单相关的，包含红包、优惠券、优惠名额）不能超过19个字符");
        }
        if(czjusecoupon.getOrderno()!=null&&czjusecoupon.getOrderno().length()>50){
            throw new ClassCheckException("使用的奖品（主要和订单相关的，包含红包、优惠券、优惠名额）不能超过50个字符");
        }
        if(czjusecoupon.getCouponId()!=null&&czjusecoupon.getCouponId().length()>19){
            throw new ClassCheckException("使用的奖品（主要和订单相关的，包含红包、优惠券、优惠名额）不能超过19个字符");
        }
        if(czjusecoupon.getCouponname()!=null&&czjusecoupon.getCouponname().length()>50){
            throw new ClassCheckException("使用的奖品（主要和订单相关的，包含红包、优惠券、优惠名额）不能超过50个字符");
        }
    }
    public void checkListEntity(List<Czjusecoupon> listCzjusecoupon) throws ClassCheckException {

        for (Czjusecoupon czjusecoupon : listCzjusecoupon) {
            checkEntity(czjusecoupon);
        }

    }

    /**
     * 支付完成时保存数据
     * 发送红包时保存数据
     * @param awarduseId
     * @param orderno
     * @return
     */
    public boolean businessSave(String awarduseId,String orderno){
        try {
            if(StringUtils.isBlank(awarduseId)||StringUtils.isBlank(orderno)){
                return false;
            }
            //明确已存在奖品数据的情况下
            Czjawarduse awarduse = czjawarduseService.queryById(awarduseId);
            Czjawardstock award = czjawardstockService.queryByAwardstockId(awarduse.getAwardId());


            Czjusecoupon paramEntity = new Czjusecoupon();
            paramEntity.setOrderno(orderno);

            Czjusecoupon czjusecoupon  = this.queryByOne(ConvertObj.toMap(paramEntity));
            if(czjusecoupon==null){
                //第一次保存
                czjusecoupon = new Czjusecoupon();
                czjusecoupon.setAwardtype(award.getAwardType());
                czjusecoupon.setOrderno(orderno);
                czjusecoupon.setCouponname(award.getThingName());
                czjusecoupon.setEndTime(award.getValidDate());
                czjusecoupon.setUserinfoId(awarduse.getUserInfoId());
                czjusecoupon.setPrice(awarduse.getPrice());
                czjusecoupon.setCouponId(awarduse.getAwarduseId());
                czjusecoupon.setUsecouponId(UUIDUtils.getUUID());
                this.insert(czjusecoupon);
                return true;
            }else{
                czjusecoupon.setAwardtype(award.getAwardType());
                czjusecoupon.setOrderno(orderno);
                czjusecoupon.setCouponname(award.getThingName());
                czjusecoupon.setEndTime(award.getValidDate());
                czjusecoupon.setUserinfoId(awarduse.getUserInfoId());
                czjusecoupon.setPrice(awarduse.getPrice());
                czjusecoupon.setCouponId(awarduse.getAwarduseId());
                this.update(czjusecoupon);
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }


    }


    /**
     * 通过订单查找优惠券，并设置到页面里
     * @param orderno
     * @param couponsId
     * @param model
     */
    public void setCouponsByOrderCode(String orderno,String couponsId, ModelMap model) {

        if(StringUtils.isBlank(couponsId)){
            return;
        }
        Coupons coupons = czjawardstockService.queryMapById(couponsId);
        Czjusecoupon params = new Czjusecoupon();
        params.setOrderno(orderno);
        Czjusecoupon czjusecoupon = queryByOne(ConvertObj.toMap(params));
        if(czjusecoupon!=null){
            if(coupons==null){
                coupons = new Coupons();
            }
            coupons.setPrice(czjusecoupon.getPrice());
            coupons.setThingName(czjusecoupon.getCouponname());
            coupons.setValidDate(czjusecoupon.getEndTime());
        }
        model.addAttribute("coupons", coupons);
    }
}
